﻿using System;
using System.Windows.Forms;
using Business;
using Business.Forms;
using DevExpress.XtraGrid;

namespace Bonesoft.Controls
{
    public partial class ListControl : DevExpress.XtraEditors.XtraUserControl
    {
        private DevExpress.XtraGrid.GridControl _grid;

        private bool _usaAtalhos = true;

        public bool UsaAtalhos
        {
            get
            {
                return _usaAtalhos;
            }
            set
            {
                _usaAtalhos = value;
                if (_usaAtalhos)
                {
                    cmdAlterar.Text = "Alterar (F7)";
                    cmdExcluir.Text = "Excluir (F5)";
                    cmdNovo.Text = "Novo (F6)";
                }
                else
                {
                    cmdAlterar.Text = "Alterar";
                    cmdExcluir.Text = "Excluir";
                    cmdNovo.Text = "Novo";
                }

            }
        }

        public object Entity { get; set; }
        public BindingSource Source { get; set; }
        public GridControl Grid
        {
            get
            {
                return _grid;
            }
            set
            {
                _grid = value;
            }
        }

        private IForm _FormEdit;

        public IForm FormEdit
        {
            get
            {
                return _FormEdit;
            }
            set
            {
                _FormEdit = value;
                if (value != null && _FormEdit.Permissao != null)
                {
                    cmdAlterar.Enabled = value.Permissao.PermissaoUpdate;
                    cmdNovo.Enabled = value.Permissao.PermissaoInsert;
                    cmdExcluir.Enabled = value.Permissao.PermissaoDelete;
                }
                
            }
        }

        public ListControl()
        {
            InitializeComponent();

        }

        private void cmdNovo_Click(object sender, System.EventArgs e)
        {
            Novo();

        }

        public void Novo()
        {
            try
            {
                var o = FormEdit.New();
                if (o != null)
                {
                    Source.Add(o);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Não foi possível criar um novo registro.\n\n" +
                                "Mensagem do erro: " + ex.Message);
            }

        }

        private void cmdAlterar_Click(object sender, System.EventArgs e)
        {
            Alterar();
        }

        public void Alterar()
        {
            try
            {

            }
            catch (Exception ex)
            {
                MessageBox.Show("Não foi possível alterar o registro.\n\n" +
                                "Mensagem do erro: " + ex.InnerException);
            }
            if (Source.Current == null)
            {
                return;
            }
            FormEdit.Update(Source.Current);
        }

        private void cmdExcluir_Click(object sender, System.EventArgs e)
        {
            Excluir();
        }

        public void Excluir()
        {
            try
            {
                if (Source.Current == null)
                {
                    return;
                }
                var s = "Deseja realmente excluir este item?";
                var result = MessageBox.Show(s, "Atenção", MessageBoxButtons.YesNo);
                if (result == DialogResult.Yes)
                {
                    RepositoryBase<object>.Delete(Source.Current);
                    Source.Remove(Source.Current);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro ao excluir registro.\n\n" +
                                                "Mensagem do erro: " + ex.InnerException);
            }


        }

        private void ListControl_KeyDown(object sender, KeyEventArgs e)
        {
            if (UsaAtalhos)
            {
                switch (e.KeyData)
                {
                    case Keys.F5:
                        Excluir();
                        break;
                    case Keys.F6:
                        Novo();
                        break;
                    case Keys.F7:
                        Alterar();
                        break;
                }
            }

        }
    }
}
